public class Solution {
    public static void main(String[] args) {
        Solution s = new Solution();
//        System.out.println(s.getSum(15,7));
        System.out.println(s.isUnique("equal"));
    }

    public int getSum(int a, int b) {
        /**
         *  两整数相加（不可以使用+-运算符，这种要求一般就是要求我们使用位运算的相关知识了）*/
        // 1 预处理-创建所需变量
        int carry = a & b;
        int c = a ^ b;

        // 2 执行逻辑
        while(carry != 0) {
            // -存在进位，相加
            int tempC = c ^ (carry << 1);
            // -计算相加进位
            int tempCarry = c & (carry << 1);
            // -赋值
            c = tempC;
            carry = tempCarry;
        }

        // 3 返回值
        return c;
    }

    public boolean isUnique(String astr) {
        /**
         * 判断字符串是否唯一
         * 要求：
         *  不使用额外的数据结构
         * 解法：
         *  由于数据仅包含小写字母，即仅有26种取值可能，可以使用位图*/
        // 1 预处理
        int bitMap = 0;

        // 2 遍历字符串，使用位图记录
        for(char e: astr.toCharArray()) {
            int x = e - 'a';
            // -判断字符是否存在
            if(((bitMap >> x) & 1) == 1) {
                return false;
            }
            // -记录字符串
            bitMap |= (1 << x);
        }

        // 3 返回值
        return true;
    }
}
